package jnpf.database.enums;

import jnpf.database.constant.DbFieldConst;
import jnpf.database.source.DbBase;
import jnpf.database.source.impl.DbOracle;
import jnpf.database.source.impl.DbPostgre;

/**
 * 别名枚举
 *
 * @author JNPF开发平台组
 * @version V3.2.0
 * @copyright 引迈信息技术有限公司
 * @date 2021/6/29
 */
public enum DbAliasEnum {

    /**
     * 允空
     */
    ALLOW_NULL("F_ALLOW_NULL") {
        @Override
        public String getSign(int i){
            // 0:空值 NULL
            if(i == 1){
                return DbFieldConst.NULL;
            }else{
                // 1:非空值 NOT NULL
                return DbFieldConst.NOT_NULL;
            }
        }
        @Override
        public Integer getNum(Object sign){
            // 0:空值 NULL
            if(sign.equals(DbFieldConst.NULL)){
                return 1;
            }else{
                // 1:非空值 NOT NULL
                return 0;
            }
        }
    },
    /**
     * 主键
     * 存在：1，不存在：0
     */
    PRIMARY_KEY("F_PRIMARY_KEY") {
        @Override
        public Boolean getSign(int i){
            // 主键
            if(i == 1){
                return DbFieldConst.IS_PRIMARY_KEY;
            }else{
                // 非主键
                return DbFieldConst.NOT_PRIMARY_KEY;
            }
        }
        @Override
        public Integer getNum(Object flag){
            // 主键
            if(Boolean.valueOf(flag.toString())){
                return 1;
            }else{
                // 非主键
                return 0;
            }
        }
    },
    /**
     * 总数返回
     */
    TOTAL_RECORD("totalRecord");

    public <T> T getSign(int i){
        return null;
    }

    public <T>Integer getNum(T sign){
        return null;
    }

    private final String alias;

    DbAliasEnum(String alias) {
        this.alias = alias;
    }

    public String AS() {
        return alias;
    }

    public String asByDb(DbBase db) {
        if (DbPostgre.class.equals(db.getClass())) {
            //postgre别名只能输出小写，Oracle只能大写
            //Mysql默认，SqlServer默认
            return alias.toLowerCase();
        } else if (DbOracle.class.equals(db.getClass())) {
            return alias.toUpperCase();
        } else {
            return alias;
        }
    }

    public static String getAsByDb(DbBase db, String keyWord) {
        if (DbPostgre.class.equals(db.getClass())) {
            //postgre别名只能输出小写，Oracle只能大写
            //Mysql默认，SqlServer默认
            return keyWord.toLowerCase();
        } else if (DbOracle.class.equals(db.getClass())) {
            return keyWord.toUpperCase();
        } else {
            return keyWord;
        }
    }

}
